import { Module, Global } from '@nestjs/common';
import { CacheModule } from '@nestjs/cache-manager';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { redisStore } from 'cache-manager-redis-yet';
import type { RedisClientOptions } from 'redis';
import { RedisService } from './redis.service';

@Global()
@Module({
  imports: [
    // 注册异步缓存模块，使用RedisClientOptions作为参数
    CacheModule.registerAsync<RedisClientOptions>({
      // 导入ConfigModule模块
      imports: [ConfigModule],
      // 注入ConfigService服务
      inject: [ConfigService],
      // 使用工厂函数创建缓存
      useFactory: async (configService: ConfigService) => {
        // 创建Redis存储
        const store = await redisStore({
          // 从配置服务中获取Redis主机和端口
          socket: {
            host: configService.get<string>('REDIS_HOST'),
            port: configService.get<number>('REDIS_PORT')
          },
          // 从配置服务中获取Redis过期时间
          ttl: configService.get<number>('REDIS_TTL'),
          // 从配置服务中获取Redis数据库
          database: configService.get<number>('REDIS_DB')

          // 从配置服务中获取Redis密码
          // password: configService.get<string>('REDIS_PASSWORD')
        });
        // 返回存储
        return {
          store
        };
      }
    })
  ],
  // 提供RedisService服务
  providers: [RedisService],
  // 导出RedisService服务
  exports: [RedisService]
})
export class RedisModule {}
